1. The Field of the Invention
The field of the present invention is the development of drivers for computer hardware. More specifically, the present invention relates to methods, systems, and computer program products for abstracting computer hardware device drivers.
2. The Prior State of the Art
Personal computers, unlike proprietary computer systems, are fabricated with widely available components. In a typical personal computer, various manufacturers are responsible for producing the components that are present. For example, it is not uncommon that a personal computer""s processor, motherboard, hard disk, CD-ROM, disk controller, video processing, audio processing, modem, network interface, keyboard, mouse, etc. are each manufactured by a separate entity. Alternatively, at times it may be advantageous to combine several pieces of hardware into a single device. A motherboard may integrate video processing, audio processing, and a disk controller as well as keyboard and mouse interfaces. Nevertheless, a basic philosophy of personal computers is the ability to upgrade, to replace an old component or to add a new one. Even computers with heavily integrated motherboards offer the option of adding new hardware.
Traditionally, new hardware is added to a personal computer through a peripheral bus on the motherboard. Hardware connected to the peripheral bus may be replaced as it becomes obsolete or inoperable. To facilitate the manufacturing of computer hardware, several standards have emerged for peripheral buses, including ISA, ESDI, PCI, SCSI, and others. Hardware from any manufacturer that conforms to a peripheral bus standard may be connected to the peripheral bus for use by the personal computer. This concept of being able to connect hardware designed by any one of several competing manufacturers through a peripheral bus is referred to generally as an open architecture.
Traditionally, peripheral buses have required removing a personal computer""s case to gain access, presenting at least two problems. First, many consumers lack the knowledge and confidence necessary to open a personal computer""s case and connect a hardware device. Therefore, it is not uncommon for a device purchaser to make a support call for no other reason than to have a support representative reassure the purchaser as he or she follows steps listed in printed documentation included with the device. Second, some consumers may not even consider opening their computer, preferring instead to have the work performed by an expert. Thus, consumers may resist upgrading their computer equipment, either from a fear of causing damage or from the added expense of paying another for the installation. In either case, the need to open a computer case will likely limit the market for some hardware devices.
In contrast, traditional external modems offer the convenience of being easily attached to a personal computer""s external serial port. Unfortunately, such connections tend to be slow, especially given the increasingly image-oriented content of the World Wide Web. The problem is three fold, slow serial ports connecting slow modems connected to slow telephone lines. Nevertheless, installation is relatively easy and the cost of Internet access is controlled by fierce competition among Internet service providers (xe2x80x9cISPsxe2x80x9d). However, as high-speed networking and communication enters the realm of home-based personal computers, the demand for faster devices that can be connected without opening a computer""s case is increasing.
In response to this increasing demand, two new external buses have been developed to overcome the performance limitations inherent in serial port connections, the universal serial bus (xe2x80x9cUSBxe2x80x9d) and the 1394 bus (xe2x80x9c1394xe2x80x9d). These buses are highly attractive to those who would provide high-speed digital lines for home use. With buses like USB and 1394, a line provider has increased confidence that investments in bringing digital access to the home will reach a market larger than consumers willing to open their computer cases or those willing to pay someone else for installing new hardware. Installation becomes a matter of plugging devices into an external computer socket.
Similarly, cable modems are ideally suited to USB and 1394. A cable provider can ship a modem to a customer who only needs make a few connections. This arrangement eliminates liability, increased expense, or potential mistrust that may develop from sending out a technician to install a modem that would otherwise require opening the computer case. Manufacturers sell more modems, cable providers increase their customer base. However, device manufacturers face a significant hurdle in their effort to supply devices in an environment of increasingly diverse buses, whether they are internal or external.
In addition to a physical connection, software drivers must be written to make a connected hardware device accessible to the application programs executing on a personal computer. Just as a peripheral bus standard provides a common means for accessing a particular bus, a device driver provides a common means for accessing a particular device. Thus, device drivers generally have been written to access a given hardware device connected to a given bus, with each supported bus requiring a separate device driver.
Although the potential number of buses may not seem like much of an impediment to hardware manufacturers writing device drivers, the problem is not as simple as one driver for each bus. First, various operating systems for personal computers offer incompatible support for writing device drivers. Therefore, the number of buses must be multiplied at least by the number of supported operating systems to determine the how may device drivers are required. Second, as new technology becomes available, a new driver must be written to make use of those advances. A new driver may be required even for minor enhancements. Naturally, writing, testing, and supporting a large number of device drivers demands a significant commitment of resources.
However, in many respects the effort to support multiple device drivers is entirely duplicative. For example, much of the functionality needed to interface with network and other communication devices is independent of the particular bus used to connect the network device. Thus, the only portion of a network device driver that must be unique is the part that communicates directly with a particular bus or network. This is true for a single manufacturer who offers multiple network devices as well as for the industry producing network devices as a whole. Not only is the effort substantial to produce a network device driver for each peripheral bus/revision/operating system permutation, but that effort is largely wasted.
Operating system providers share this problem with hardware developers because they must include network device drivers from many manufacturers in order for the operating system to be useful. Although the operating system provider may not bear primary responsibility for testing network device drivers, some degree of functionality with at least some number of network device drivers must be examined to assure the operating system will run properly when installed on a personal computer. Furthermore, significant resources must be dedicated to coordinating the release of an operating system with the enormous number of network device drivers that are written.
The foregoing problems in the prior state of the art have been successfully overcome by the present invention, which is directed to methods, systems, and computer program products for abstracting computer hardware device drivers. The invention is particularly useful in reducing the burden hardware developers otherwise experience in producing network device drivers, where each driver must be specific to the particular peripheral bus used to connect the network device. For example, as USB, 1394, and other peripheral bus standards proliferate to meet the growing demand for easier access to high-speed networking and communication, the present invention allows for a core set of host-based drivers provided by the operating system rather than individual hardware developers.
According to one aspect of the invention, a software implemented message set and mechanism for networking and communication devices connected to a host computer through a bus (e.g. PCI, USB, or 1394) or a network (e.g. Internet Protocol) is provided. The message set, identified as Remote Network Driver Interface Specification or Remote NDIS, allows a host computer to send connected devices data and commands without knowing specific details regarding the bus or network used to connect the device. In contrast, NDIS itself only defines a protocol for configuring network devices, sending network data, and receiving network data on behalf of other applications executing on a host computer. NDIS necessarily requires some adaptation for individual buses or networks.
Drivers for devices that support remote NDIS, termed remote NDIS devices, include an upper layer that is independent of any particular bus or network. Transport functionality that is specific to individual buses or networks is implemented in lower remote NDIS driver layers, written specifically for a particular bus or network. However, by specifying a standard message set and mechanism for passing data and commands to a remote NDIS device, the operating system can provide these host-based drivers, freeing hardware developers to more fully concentrate resources on the functionality of their devices.
More specifically, one aspect of the invention includes a remote NDIS miniport layer that encapsulates device data and commands into data structures that can be passed without modification to a networking device. These data structures, referred to as remote NDIS messages, can then be passed to one or more bus or network-specific layers that understand the particular bus or network connecting the remote NDIS device. For example, an intermediate bus or network-specific layer, known as a bus microport, may take remote NDIS messages and pass them to a lower bus or network-specific layer that is capable of transferring the messages to a particular bus or network.
In addition to reducing the number of host-based drivers required to support networking devices, remote NDIS also isolates network functionality from the bus-specific portion of a driver. Therefore, extensions can be made to networking features without impacting bus- or network-specific transport layers. Moreover, this isolation is available on both the remote NDIS device as well as the remote NDIS host. By addressing these issues, remote NDIS provides for more rapid deployment of networking and communication devices at a lower cost.
Further features and advantages of the invention will be set forth in the description that follows, and in part will be obvious from the description, or may be learned by the practice of the invention. The features and advantages of the invention may be realized and obtained by means of the instruments and combinations particularly pointed out in the appended claims. These and other advantages and features of the present invention will become more fully apparent from the following description and appended claims, or may be learned by the practice of the invention as set forth hereinafter.